package com.cleaningcloud.cld.service.mini;

import com.cleaningcloud.cld.domain.*;
import com.cleaningcloud.cld.domain.dto.*;
import com.cleaningcloud.cld.domain.mini.AttStaffInfo;
import com.cleaningcloud.cld.domain.mini.CheckInResult;
import com.cleaningcloud.cld.domain.mini.HolidayData;
import com.cleaningcloud.cld.domain.mini.HolidayDto;
import com.cleaningcloud.cld.domain.vo.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 工资管理接口
 */
public interface IMiniSalaryService {

    /**
     * 查询排休列表
     *
     * @param map
     * @return
     */
    List<HolidayData> selectHolidayList(HolidayDto holidayDto);


    /**
     * 排休明细查看
     *
     * @param cldRestbreaksDto
     * @return
     */
    List<CldRestbreaksVo> getScheduleDetails(CldRestbreaksDto cldRestbreaksDto);

    /**
     * 新增排休
     *
     * @param cldRestbreaksDto
     * @return
     */
    int addSchedule(CldRestbreaksDto cldRestbreaksDto);

    /**
     * @Author Shaw
     * @Description 修改排休
     * @date: 2025-10-13 10:53
     * @param: //TODO
     */
    int updateSchedule(CldRestbreaksDto cldRestbreaksDto);

    /**
     * 查看加班列表
     *
     * @param cldOvertimeDto
     * @return
     */
    List<CldOvertimeVo> getWorkOvertimeList(CldOvertimeDto cldOvertimeDto);


    /**
     * 审核加班列表查看
     *
     * @param cldOvertimeDetailsDto
     * @return
     */
    List<CldOvertimeDetailsVo> getAuditOvertimeList(CldOvertimeDetailsDto cldOvertimeDetailsDto);


    /**
     * 加班详情查看
     *
     * @param overTimeId
     * @return
     */
    CldOvertimeVo getWorkOvertimeInfo(Long overTimeId);

    /**
     * 加班明细查看
     *
     * @param cldOvertimeDetailsVo
     * @return
     */
    CldOvertimeVo getWorkOvertimeDetails(CldOvertimeDetailsVo cldOvertimeDetailsVo);


    /**
     * 审核加班详情查看
     *
     * @param overtimeDetailsId
     * @return
     */
    CldOvertimeDetailsVo getAuditOvertimeDetails(Long overtimeDetailsId);


    /**
     * 新增加班
     *
     * @param cldOvertimeDto
     * @return
     */
    int addWorkOvertime(CldOvertimeDto cldOvertimeDto);

    /**
     * 加班审核
     *
     * @param cldOvertimeDetails
     * @return
     */
    int auditWorkOvertime(CldOvertimeDetails cldOvertimeDetails);

    /**
     * 加班打卡信息修改
     *
     * @param list
     * @return
     */
    int editWorkOvertimeCheck(List<CldAttendance> list);


    /**
     * 员工确认加班列表
     *
     * @param cldOvertimeDetailsDto
     * @return
     */
    List<CldOvertimeDetailsVo> getConfirmOvertimeList(CldOvertimeDetailsDto cldOvertimeDetailsDto);

    /**
     * 员工确认加班
     *
     * @param cldOvertimeDetails
     * @return
     */
    int confirmWorkOvertime(CldOvertimeDetails cldOvertimeDetails);

    /**
     * 新增请假信息
     *
     * @param cldLeaveDto
     * @return
     */
    int addLeave(CldLeaveDto cldLeaveDto);

    /**
     * 请假列表查看
     *
     * @param cldLeaveDto
     * @return
     */
    List<CldLeaveVo> getLeaveList(CldLeaveDto cldLeaveDto);

    /**
     * 审核请假
     *
     * @param cldLeaveDto
     * @return
     */
    int auditLeave(CldLeaveDto cldLeaveDto);

    /**
     * 请假详情查看
     *
     * @param leaveId
     * @return
     */
    CldLeaveVo getLeaveDetails(Long leaveId);

    /**
     * 新增补卡信息
     *
     * @param cldReplaceDto
     * @return
     */
    int addReplacement(CldReplaceDto cldReplaceDto);

    /**
     * 补卡列表查看
     *
     * @param cldReplaceDto
     * @return
     */
    List<CldReplaceVo> getReplacementList(CldReplaceDto cldReplaceDto);

    /**
     * 补卡详情
     *
     * @param replaceId
     * @return
     */
    CldReplaceVo getReplacementDetails(Long replaceId);

    /**
     * 补卡信息审核
     *
     * @param cldReplaceDto
     * @return
     */
    int auditReplacement(CldReplaceDto cldReplaceDto);

    /**
     * 奖惩记录列表查看
     *
     * @param cldRewardsDto
     * @return
     */
    List<CldRewardsVo> getRewardsList(CldRewardsDto cldRewardsDto);

    /**
     * 新增奖惩记录
     *
     * @param cldRewardsDto
     * @return
     */
    int addRewards(CldRewardsDto cldRewardsDto);

    /**
     * 奖惩详情查看
     *
     * @param rewardsId
     * @return
     */
    CldRewardsVo getRewardsDetails(Long rewardsId);

    /**
     * 奖惩审核
     *
     * @param cldRewardsDto
     * @return
     */
    int auditRewards(CldRewardsDto cldRewardsDto);

    /**
     * 每日薪酬查看
     *
     * @param cldPayConfirm
     * @return
     */
    Map<String, Object> selectDailySalary(CldPayConfirm cldPayConfirm);

    /**
     * 每日薪酬确认
     *
     * @param cldPayConfirm
     * @return
     */
    int dailySalaryConfirmation(CldPayConfirm cldPayConfirm);

    /**
     * 查看薪酬列表
     *
     * @param cldPayConfirm
     * @return
     */
    List<Map<String, Object>> selectSalaryList(CldPayConfirmDto cldPayConfirm);

    /**
     * 薪酬明细
     *
     * @param cldPayConfirm
     * @return
     */
    List<Map<String, Object>> selectSalaryDetails(CldPayConfirm cldPayConfirm);

    /**
     * 获取考勤信息
     *
     * @param cldAttendanceDto
     * @return
     */
    CldAttendanceVo getAttendanceInformation(CldAttendanceDto cldAttendanceDto);

    /**
     * 获取打卡信息配置
     *
     * @param projectId
     * @return
     */
    CldProject getClockInInfo(Long projectId);

    /**
     * 获取考勤列表
     *
     * @param cldAttendanceDto
     * @return
     */
    List<CldAttendanceVo> selectAttendanceList(CldAttendanceDto cldAttendanceDto);

    /**
     * 获取异常考勤列表
     *
     * @param cldAttendanceDto
     * @return
     */
    List<CldAttendanceVo> selectAbnormalAttendanceList(CldAttendanceDto cldAttendanceDto);

    /**
     * 打卡提交
     *
     * @param cldAttendanceDto
     * @return
     */
    int checkIn(CldAttendanceDto cldAttendanceDto);

    /**
     * 判断是否可以打卡
     *
     * @param attendanceId
     * @param lng
     * @param lat
     * @return
     */
    CheckInResult isCheckIn(Long attendanceId, BigDecimal lng, BigDecimal lat);

    /**
     * 查看出勤人员
     *
     * @param cldAttendance
     * @return
     */
    List<Map<String, Object>> selectAttStaff(CldAttendance cldAttendance);

    /**
     * 编辑出勤人员
     *
     * @param list
     * @return
     */
    int editAttStaff(AttStaffInfo attStaffInfo);

    /**
     * @Author Shaw
     * @Description 根据岗位获取班次信息
     * @date: 2025-09-30 16:00
     * @param: //TODO
     */
    Map<String, Object> getClassesInfoMap(CldClasses cldClasses);
}
